package com.example.apidocserver.domain.document.service;

import com.example.apidocserver.domain.document.dto.UploadMenuApiDto;
import com.example.apidocserver.domain.document.entity.DocMenu;
import com.example.apidocserver.interfaces.vo.OrderChangeVo;

import java.util.List;

/**
 * 接口目录(DocMenu)表服务接口
 *
 * @author makejava
 * @since 2023-02-22 22:17:46
 */
public interface DocMenuService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    DocMenu queryById(Integer id);

    /**
     * 查询所有对象
     *
     * @return 查询结果
     */
    List<DocMenu> queryAll();

    /**
     * 根据对象查询
     *
     * @param docMenu 筛选条件
     * @return 查询结果
     */
    List<DocMenu> queryByEntity(DocMenu docMenu);

    /**
     * 新增数据
     *
     * @param docMenu 实例对象
     * @return 实例对象
     */
    DocMenu insert(DocMenu docMenu);

    /**
     * 修改数据
     *
     * @param docMenu 实例对象
     * @return 实例对象
     */
    DocMenu update(DocMenu docMenu);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(Integer id);

    /**
     * 查询文档目录
     *
     * @param docId     文档id
     * @param writeFlag 查询启用数据
     * @return 目录对象
     */
    List<DocMenu> find(Integer docId, boolean writeFlag);

    /**
     * 增加或修改文档目录信息
     *
     * @param docMenu 文档目录信息
     * @return 文档目录信息
     */
    DocMenu upsertDocMenu(DocMenu docMenu);

    /**
     * 数据移动位置
     *
     * @param params 实体
     */
    int orderChangeMenu(OrderChangeVo params);

    /**
     * 删除文档目录
     *
     * @param id 目录id
     * @return 删除数量
     */
    int deleteMenu(Integer id);

    /**
     * 增加目录树
     *
     * @param menuApiDto 导入文档信息
     */
    void insertMenuTrees(UploadMenuApiDto menuApiDto);
}
